﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ERPStore.Settings
{
	/// <summary>
	/// Parametre de configuration globaux du catalog
	/// </summary>
	[Serializable]
	public class CatalogSettings
	{
		public CatalogSettings()
		{
			PageSize = 10;
			PageParameterName = "page";
			PageSizeParameterName = "pageSize";
			PageSortParameterName = "sortby";
			PageSortDirectionParameterName = "sortdirection";
			HasStockFilterParameterName = "hasstock";
			SortList = new List<SortSetting>();
			ProductCategoryParameterName = "category";
			BrandParameterName = "brand";
			ShippingFreeFilterParameterName = "shippingfree";
			MinSalePriceParameterName = "minsp";
			MaxSalePriceParameterName = "maxsp";
			HasPictureParameterName = "haspicture";
			Filter = new CatalogSettingsFilter();
			AllowNotSellableInSearchResult = false;
		}

		/// <summary>
		/// Nombre d'items affiché par page
		/// </summary>
		/// <value>The size of the page.</value>
		public int PageSize { get; set; }

		/// <summary>
		/// Nom du paramètre de paging
		/// </summary>
		/// <value>The name of the page parameter.</value>
		public string PageParameterName { get; set; }

		/// <summary>
		/// Nom du paramètre de tri
		/// </summary>
		public string PageSortParameterName { get; set; }

		/// <summary>
		/// Nom du sens du tri
		/// </summary>
		public string PageSortDirectionParameterName { get; set; }

		/// <summary>
		/// Nom du paramètre dans l'url pour filtrer par catégorie
		/// </summary>
		public string ProductCategoryParameterName { get; set; }

		/// <summary>
		/// Nom du paramètre dans l'url pour filtre par marque
		/// </summary>
		public string BrandParameterName { get; set; }

		/// <summary>
		/// Nom du paramètre pour restriction sur le stock
		/// </summary>
		public string HasStockFilterParameterName { get; set; }

		/// <summary>
		/// Nom du paramètre pour l'affichage des produits avec photo
		/// </summary>
		public string HasPictureParameterName { get; set; }

		/// <summary>
		/// Nom du paramètre pour le filtre sur les frais de port gratuits
		/// </summary>
		public string ShippingFreeFilterParameterName { get; set; }

		/// <summary>
		/// Tarif minimal de vente d'un produit
		/// </summary>
		public string MinSalePriceParameterName { get; set; }

		/// <summary>
		/// Tarif maximal de vente d'un produit
		/// </summary>
		public string MaxSalePriceParameterName { get; set; }

		/// <summary>
		/// Nom du paramètre de taille des pages
		/// </summary>
		public string PageSizeParameterName { get; set; }

		/// <summary>
		/// Parametres par défaut ajoutés à l'url d'une marque
		/// </summary>
		public string BrandDefaultUrlParameters { get; set; }

		/// <summary>
		/// Paramètres par défaut ajoutés à l'url d'une categorie de produit
		/// </summary>
		public string ProductCategoryDefaultUrlParameters { get; set; }

		/// <summary>
		/// Paramètres par défaut ajouté à l'url d'une recherche
		/// </summary>
		public string SearchDefaultUrlParameters { get; set; }

		/// <summary>
		/// Paramètre par défaut ajouté à l'url d'un produit
		/// </summary>
		public string ProductDefaultUrlParameters { get; set; }

		/// <summary>
		/// Chemin relatif vers une image fixe si elle n'existe pas sur le produit
		/// </summary>
		public string MissingProductImageVirtualPath { get; set; }

		/// <summary>
		/// Afficher les produits non vendables dans les résultats de recherche
		/// </summary>
		public bool AllowNotSellableInSearchResult { get; set; }

		/// <summary>
		/// Filtre du catalogue
		/// </summary>
		/// <value>The filter.</value>
		public CatalogSettingsFilter Filter { get; set; }

		/// <summary>
		/// Sort list
		/// </summary>
		public List<SortSetting> SortList { get; set; }

	}
}
